//
// Description: 844. 走迷宫
// Created by Loading on 2022/5/15.
//

#include <bits/stdc++.h>

using namespace std;

typedef pair<int, int> PII;

constexpr int N = 110;

// 图
int g[N][N];
// 每个点到起点的距离
int d[N][N];
int n, m;

int bfs() {
    // 坐标队列
    queue<PII> q;
    q.emplace(PII{0, 0});
    d[0][0] = 0;

    // 四个方向坐标偏移量
    int dx[4] = {-1, 0, 1, 0};
    int dy[4] = {0, -1, 0, 1};

    while (!q.empty()) {
        auto p = q.front();
        q.pop();
        // 四个方向扩展
        for (int i = 0; i < 4; ++i) {
            int x = p.first + dx[i];
            int y = p.second + dy[i];
            // 在边界内且可以走且没有走过
            if (x >= 0 && x < n && y >= 0 && y < m && g[x][y] == 0 && d[x][y] == -1) {
                d[x][y] = d[p.first][p.second] + 1;
                q.emplace(PII{x, y});
            }
        }
    }

    return d[n - 1][m - 1];
}

int main() {
    cin >> n >> m;
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < m; ++j) {
            cin >> g[i][j];
        }
    }

    memset(d, -1, sizeof d);

    cout << bfs() << endl;

    return 0;
}